package code.class1;

/**
 * https://leetcode.cn/problems/reverse-words-in-a-string-iii/
 *
 * 反转字符串中的单词 III
 *
 * 输入：s = "Let's take LeetCode contest"
 * 输出："s'teL ekat edoCteeL tsetnoc"
 */
public class Code14_ReverseWords {
    public static void main(String[] args) {
        String str = "Let's take LeetCode contest";
        String s = reverseWords(str);
        System.out.println("s = " + s);
    }

    private static String reverseWords(String s) {
        String[] arr = s.split(" ");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = reverse(arr[i].toCharArray());
            sb.append(arr[i]).append(" ");
        }
        return sb.toString().trim();
    }

    public static String reverse(char[] arr) {
        int p1 = 0, p2 = arr.length - 1;
        while (p1 < p2) {
            swap(arr, p1++, p2--);
        }
        return new String(arr);
    }

/**
 * 交换字符数组中指定位置的两个字符
 * @param arr 字符数组
 * @param x 第一个字符的索引位置
 * @param y 第二个字符的索引位置
 */
    public static void swap(char[] arr, int x, int y) {
    // 使用临时变量t存储第一个位置的字符
        char t = arr[x];
    // 将第二个位置的字符赋值给第一个位置
        arr[x] = arr[y];
    // 将临时变量t中存储的字符（原第一个位置的字符）赋值给第二个位置
        arr[y] = t;
    }

}
